package com.lzy.pattern.singleton.demo4;

/**
 * @ClassName: Singleton
 * @Description: 单例设计模式：懒汉模式，线程安全，双重检查锁
 * @Author: LiuZy
 * @Date: 2022/4/9 20:31
 * @Version: 1.0
 */
public class Singleton {


    //1.私有化无参构造方法
    private Singleton(){}

    //2.在成员位置使用静态变量来声明该类型
    private static volatile  Singleton instance;

    //3.对外提供获取类对象的方法
    //线程不安全
    public static Singleton getInstance(){
        //第一次判断，如果instance不为null，不进入抢锁阶段，直接返回实
        if(instance == null){
            synchronized(Singleton.class){
                //抢到锁之后再次判断是否为null
                if(instance == null){
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    instance = new Singleton();
                }
            }
        }

        return instance;
    }
}